/**
 * Created by .
 * User: manunix
 * Date: 03/06/11
 * Time: 15.21
 * To change this template use File | Settings | File Templates.
 */
var geocoder;
var map;
var bounds;
var deptMarker;
var arrMarker;
var lastSearchedAddr = {
    arrival:"",
    departure:""
}
var utente = {
    id:null
}
var route;

function fitsMarkersOnMap() {
    bounds = new google.maps.LatLngBounds();
    if (deptMarker)
        bounds.extend(deptMarker.position);
    if (arrMarker)
        bounds.extend(arrMarker.position);
    map.fitBounds(bounds);
}


function searchAddress(add, addrType) {

    /*select list selectors*/
    var dlsId = $('#dept_list_selector');
    var alsId = $('#arr_list_selector');

    $(dlsId).hide();
    $(alsId).hide();

    if (addrType == 'dept') {
        /*map clean*/
        if (deptMarker) {
            deptMarker.setMap(null);
            deptMarker = null;
        }
        /*se il filtro di ricerca è modificato effettua una nuova ricerca
         * altrimenti visualizza la ricerca precedente*/
        if (lastSearchedAddr.departure !== add) {

            lastSearchedAddr.departure = add;
            dlsId.empty();
            /*ritorna la lista di indirizzi*/
            codeAddress(add, addrType, dlsId);
        }

        dlsId.show();

    } else if (addrType == 'arr') {
        /*map clean*/
        if (arrMarker) {
            arrMarker.setMap(null);
            arrMarker = null;
        }
        /*se il filtro di ricerca è modificato effettua una nuova ricerca
         * altrimenti visualizza la ricerca precedente*/
        if (lastSearchedAddr.arrival !== add) {

            lastSearchedAddr.arrival = add;
            alsId.empty();
            codeAddress(add, addrType, alsId);
        }

        alsId.show();
    }

}

function codeAddress(add, addrType, listSelectorId) {

    geocoder.geocode({ 'address': add}, function(results, status) {
        if (status == google.maps.GeocoderStatus.OK) {

            var ul = $('<ul></ul>');

            for (var i = 0; i < results.length; i++) {
                /*per ogni localizzazione*/
                var link = $('<a></a>', {href:'#'}).append(results[i].formatted_address);
                link.data('position', results[i].geometry.location);

                link.bind('click', function(event) {

                    var position = $(event.target).data('position');
                    var containerId = $(event.target).closest('div').attr('id');
                    var infoIty = "";
                    var marker = new google.maps.Marker({
                        position:position
                    });
                    if (containerId == 'dept_list_selector') {
                        deptMarker = marker;
                        infoIty = "Departure";
                    } else if (containerId == 'arr_list_selector') {
                        arrMarker = marker;
                        infoIty = "Arrival";
                    }
                    marker.setMap(map);
                    map.center = position;
                    /*add event onclick to marker*/

                    var infowindow = new google.maps.InfoWindow({
                        content: ''
                    });

                    marker.info = '<div style="width:240px">' + infoIty + ': </br>' + $(event.target).text() + '</div>';
                    google.maps.event.addListener(marker, 'click', function() {
                        infowindow.open(map, this);
                        infowindow.setContent(this.info);
                    });

                    /*set map bounds*/
                    fitsMarkersOnMap();

                    jQT.goBack("#ride");
                });

                var li = $('<li></li>').append(link);
                $(ul).append(li);
            }

            $(listSelectorId).append(ul);

        } else {
            alert("Geocode was not successful for the following reason: " + status);
        }
    });

}

/*search address, display marks on map*/
function processAddress(firedEvent) {
    var btName = $(firedEvent.target).attr("name");
    var addrType = "";
    if (btName.indexOf("dept", 0) != -1) {
        addrType = "dept";
    } else if (btName.indexOf("arr", 0) != -1) {
        addrType = "arr";
    }

    var addressInput = $('input[type="text"][name$="' + btName.concat("_val") + '"]');

    searchAddress($(addressInput).val(), addrType);

}

function searchRoute(firedEvent) {
    var dept_lat = deptMarker.position.lat();
    var dept_lng = deptMarker.position.lng();
    var arr_lat = arrMarker.position.lat();
    var arr_lng = arrMarker.position.lng();
    var date = $("#ity input[name=ity_date_val]").val();
    var time = $("#ity input[name=ity_time_val]").val();
    var time_range = $("#ity input[name=ity_time_range_val]").val();
    var dist_range = $("#ity input[name=ity_dist_range_val]").val();

    route = {"lat_partenza":dept_lat, "long_partenza":dept_lng, "lat_arrivo":arr_lat, "long_arrivo":arr_lng, "tolleranza_metri":dist_range, "data_partenza":date, "ora_partenza":time, "tolleranza_oraria_minuti":time_range};

    $.ajax({
        dataType: 'html',
        type: 'GET',
        data: route,
        url: 'http://mytaxisharing.alwaysdata.net/trova_richieste',
        error: function(jqXHR, textStatus, errorThrown) {
            alert("AJAX - error(): " + textStatus + " " + errorThrown + " " + jqXHR);
        },
        success: function(data, jqXHR, textStatus) {
            var results = $.parseJSON(data);
            if (results.length > 0)
                showRoutes(results);
            else
                insertRoute();
        }
    });
}

function insertRoute() {
    var len_route = findCrowsFliesDistance(route);
    var percorso = {"lat_partenza":route.lat_partenza, "long_partenza":route.long_partenza, "lat_arrivo":route.lat_arrivo, "long_arrivo":route.long_arrivo, "lunghezza":len_route};
    $.ajax({
        dataType: 'html',
        type: 'POST',
        data: percorso,
        url: 'http://mytaxisharing.alwaysdata.net/percorsi',
        error: function(jqXHR, textStatus, errorThrown) {
            alert("AJAX - error(): " + textStatus + " " + errorThrown + " " + jqXHR);
        },
        success: function(data, jqXHR, textStatus) {
            var results = $.parseJSON(data);
            var richiesta = {"id_percorso":results[0].id, "data_partenza":route.data_partenza, "ora_partenza":route.ora_partenza, "tolleranza_oraria_minuti":route.tolleranza_oraria_minuti, "stato":"nuovo"};
            $.ajax({
                dataType: 'html',
                type: 'POST',
                data: richiesta,
                url: 'http://mytaxisharing.alwaysdata.net/richieste',
                error: function(jqXHR, textStatus, errorThrown) {
                    alert("AJAX - error(): " + textStatus + " " + errorThrown + " " + jqXHR);
                },
                success: function(data, jqXHR, textStatus) {
                    var results = $.parseJSON(data);
                    var richieste_utenti = {"id_richiesta":results[0].id, "id_utente":utente.id, "proprietario":"t"};
                    $.ajax({
                        dataType: 'html',
                        type: 'POST',
                        data: richieste_utenti,
                        url: 'http://mytaxisharing.alwaysdata.net/richieste',
                        error: function(jqXHR, textStatus, errorThrown) {
                            alert("AJAX - error(): " + textStatus + " " + errorThrown + " " + jqXHR);
                        },
                        success: function(data, jqXHR, textStatus) {
                            alert("Nuova Richiesta inserita!!!");
                            jQT.goBack('#ride');
                         }
                    });
                }
            });
        }
    });
}

function showRoutes(results) {
    var ityId = $('#ity_list_selector');
    var ul = $('<ul></ul>');
    for (var i = 0; i < results.length; i++) {
        var link_ity = $('<a></a>', {href:'#'}).append('Partenza alle: ' + results[i].ora_partenza + ' a: ' + results[i].tolleranza_metri);
        link_ity.data('result', results[i]);
        link_ity.bind('click', function(event) {
            var result = $(event.target).data('result');
            var testo = 'Partenza ' + result.data_partenza + 'alle ' + result.ora_partenza;
            testo += '</br> differenza richiesta: ' + result.ora_partenza - time + ' minuti';
            testo += '</br> ' + result.lat_partenza + ', ' + result.long_partenza;
            testo += '</br> differenza richiesta: ' + result.tolleranza_metri + ' metri';
            testo += '</br> Arrivo';
            testo += '</br> ' + result.lat_arrivo + ', ' + result.long_arrivo;
            testo += '</br> differenza richiesta: ' + result.tolleranza_metri + ' metri';
            testo += '</br> Lunghezza: ' + result.lunghezza + ' metri';

            var link_utente = $('<a></a>', {href:'#'}).append('UTENTI');
            link_utente.data('id_richiesta', result.id_richiesta);
            link_utente.bind('click', function(event) {
                var id_richiesta = $(event.target).data('id_richiesta');
                $.ajax({
                    dataType: 'html',
                    type: 'GET',
                    data: {"id_richiesta":id_richiesta},
                    url: 'http://mytaxisharing.alwaysdata.net/trova_utenti',
                    error: function(jqXHR, textStatus, errorThrown) {
                        alert("AJAX - error(): " + textStatus + " " + errorThrown + " " + jqXHR);
                    },
                    success: function(data, jqXHR, textStatus) {
                        var ul = $('<ul></ul>');
                        var results = $.parseJSON(data);
                        for (var i = 0; i < results.length; i++) {
                            var testo = 'Email: ' + result.email;
                            testo += '</br> Sesso: ' + result.sesso;
                            testo += '</br> Data nascita: ' + result.data_nascita;
                            testo += '</br> Nazionalità: ' + result.nazionalita;
                            testo += '</br> Lingua: ' + result.lingua;
                            testo += '</br> Connesso: ' + result.connesso;
                            var li = $('<li></li>').html(testo);
                            $(ul).append(li);
                        }
                        $('#utenti_content').append(ul);
                        jQT.goTo('#utenti_content', '');
                    }
                });
            });

            var ity_req_insert = $('<input data-i18n="ity_req_insert" name="ity_req_insert" type="button" value="Insert Req.">');
            ity_req_insert.data('id_richiesta', result.id_richiesta);
            ity_req_insert.bind('click', function(event) {
                var id_richiesta = $(event.target).data('id_richiesta');
                $.ajax({
                    dataType: 'html',
                    type: 'POST',
                    data: {"id_richiesta":id_richiesta, "id_utente":utente.id, "proprietario":"f"},
                    url: 'http://mytaxisharing.alwaysdata.net/richieste_utenti',
                    error: function(jqXHR, textStatus, errorThrown) {
                        alert("AJAX - error(): " + textStatus + " " + errorThrown + " " + jqXHR);
                    },
                    success: function(data, jqXHR, textStatus) {
                        alert("Richiesta accodata!!!");
                        jQT.goBack('#ride');
                    }
                });
            });

            $('#ity_content').html(testo);
            $('#ity_content').append(link_utente);
            $('#ity_content').append(ity_req_insert);

            jQT.goTo('#ity_content', '');
        });
        var li = $('<li></li>').append(link_ity);
        $(ul).append(li);
    }
    $(ityId).append(ul);
}